package com.qlzb.taskmanagement.service.base;

import com.qlzb.taskmanagement.pojo.OutputWrapper;
import com.qlzb.taskmanagement.vo.base.*;

/**
 * Created with IntelliJ IDEA.
 *
 * @ClassName BaseService
 * @Description TODO    基础服务接口
 * @Authr 袁聪
 * @Date 2018/10/2 22:56
 * @Version v2.0
 */
public interface BaseService<QueryVo extends BaseQueryVo, FormVo extends BaseFormVo,IdVo extends BaseIdVo, IdListVo extends BaseIdListVo, ActionVo extends BaseActionVo, VerifyVo extends BaseVerifyVo> {

    /**
     * 根据ID查询一条数据
     * @param vo    要查询对象的ID
     * @return      查询结果
     */
    OutputWrapper findById(IdVo vo);


    /**
     * 根据ID列表查询数据
     * @param vo    要查询对象的ID列表
     * @return      查询结果
     */
    OutputWrapper findByIdList(IdListVo vo);


    /**
     * 查询一条数据
     */
    OutputWrapper findOne(QueryVo vo);


    /**
     * 根据条件vo查询一条数据
     * @param vo    要查询的条件
     * @return      查询结果
     */
    OutputWrapper findOneByQueryVo(QueryVo vo);


    /**
     * 查询全部数据
     * @return 查询结果
     */
    OutputWrapper findAll();



    /**
     * 根据条件vo查询全部数据
     * @param vo    要查询的条件
     * @return      查询结果
     */
    OutputWrapper findAllByQueryVo(QueryVo vo);



    /**
     * 根据条件vo查询全部数据（分页）
     * @param vo    要查询的条件
     * @return      查询结果
     */
    OutputWrapper findAllAndPageByQueryVo(QueryVo vo);


    /**
     * 根据验证名称vo查询数据
     * @param vo    要查询的条件
     * @return      查询结果
     */
    OutputWrapper verify(VerifyVo vo);
    


    /**
     * 添加一条数据
     * @param vo    要添加的对象
     * @return      添加结果
     */
    OutputWrapper add(FormVo vo);

    /**
     * 更新一条数据
     * @param vo    要更新的数据
     * @return      更新结果
     */
    OutputWrapper modify(FormVo vo);

    /**
     * 更新一条数据
     * @param vo    要更新的数据
     * @return      更新结果
     */
    OutputWrapper modify(IdVo vo);

    /**
     * 更新用户操作状态
     * @param vo    要更新的数据
     * @return      更新结果
     */
    OutputWrapper modify(ActionVo vo);

    /**
     * 根据ID删除一条数据
     * @param vo    要删除对象的ID
     * @return      删除结果
     */
    OutputWrapper removeById(IdVo vo);

    /**
     * 根据ID列表删除数据
     * @param vo    要删除对象的ID列表
     * @return      删除结果
     */
    OutputWrapper removeByIdList(IdListVo vo);

}
